package com.wxy.config;

import java.util.Map;

import org.springframework.web.servlet.HandlerInterceptor;

import com.wxy.domain.myException;
import com.wxy.service.jwtServiceConfig;

import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public class indexInterceptor implements HandlerInterceptor{
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		// TODO 自动生成的方法存根
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=utf-8");
		/*问题：发生在配置拦截器时，指定了不用拦截的路径但是访问时拦截器还是拦截了
		 *原因：在输入访问路径后，浏览器通常会自动访问favicon.ico文件来获取网站的一个标识，后才会访问输入的路径，
		 *导致访问favicon.ico文件时被拦截器拦截，阻止了下一步的访问。
		 *解决方法：
		 *1.在拦截器中使用request.getRequestURI()用来获取访问路径，与favicon.ico对比，相同放行。
		 *2.在配置拦截器时，将/favicon.ico路径设为不用拦截。
		 *3.在配置文件中配置拒绝浏览器访问favicon.ico文件★★★
		*/
		if(request.getRequestURI().equals("/favicon.ico"))
			return true;
		//1.获取cookie
		Cookie[] cookies=request.getCookies();
		if(cookies==null)
			throw new myException("请登录...");
		String tokenString=null;
//		//2.得到名为token的cookie的值
		for (Cookie cookie : cookies) {
			if(cookie.getName().equals("token"))
				tokenString=cookie.getValue();
		}
		if(tokenString==null)
			throw new myException("请登录...");
		//3.调用jwt判断token是否有效
		Map<String,Object> bodyMap=jwtServiceConfig.checkToken(tokenString);
		//4.有效，存入request中
		if(bodyMap==null)
			throw new myException("伪造token!!!");
		request.setAttribute("body", bodyMap);
		return true;
	}
}
